Micron Document
baubs git

Node / mirrors / respira / files / src / stores / useUIStore.ts

Displaying Raw • Download

src/stores/useUIStore.ts fix/pattern-rendering-and-coordinate-bugs (abf7b9a6) Text, 2.45 KB

import { create } from 'zustand';
import { patternConverterClient } from '../utils/patternConverterClient';

interface UIState {
// Pyodide state
pyodideReady: boolean;
pyodideError: string | null;
pyodideProgress: number;
pyodideLoadingStep: string;

// UI state
showErrorPopover: boolean;

// Actions
initializePyodide: () => Promise<void>;
setPyodideProgress: (progress: number, step: string) => void;
toggleErrorPopover: () => void;
setErrorPopover: (show: boolean) => void;
}

export const useUIStore = create<UIState>((set) => ({
// Initial state
pyodideReady: false,
pyodideError: null,
pyodideProgress: 0,
pyodideLoadingStep: '',
showErrorPopover: false,

// Initialize Pyodide with progress tracking
initializePyodide: async () => {
try {
// Reset progress
set({ pyodideProgress: 0, pyodideLoadingStep: 'Starting...', pyodideError: null });

// Initialize with progress callback
await patternConverterClient.initialize((progress, step) => {
set({ pyodideProgress: progress, pyodideLoadingStep: step });
});

set({ pyodideReady: true, pyodideProgress: 100, pyodideLoadingStep: 'Ready!' });
console.log('[UIStore] Pyodide initialized successfully');
} catch (err) {
const errorMessage = err instanceof Error ? err.message : 'Failed to initialize Python environment';
set({ pyodideError: errorMessage, pyodideProgress: 0, pyodideLoadingStep: '' });
console.error('[UIStore] Failed to initialize Pyodide:', err);
}
},

// Set progress manually (for external updates)
setPyodideProgress: (progress: number, step: string) => {
set({ pyodideProgress: progress, pyodideLoadingStep: step });
},

// Toggle error popover visibility
toggleErrorPopover: () => {
set((state) => ({ showErrorPopover: !state.showErrorPopover }));
},

// Set error popover visibility
setErrorPopover: (show: boolean) => {
set({ showErrorPopover: show });
},
}));

// Selector hooks for common use cases
export const usePyodideReady = () => useUIStore((state) => state.pyodideReady);
export const usePyodideError = () => useUIStore((state) => state.pyodideError);
export const usePyodideProgress = () => useUIStore((state) => state.pyodideProgress);
export const usePyodideLoadingStep = () => useUIStore((state) => state.pyodideLoadingStep);
export const useErrorPopover = () => useUIStore((state) => state.showErrorPopover);

Served by rngit 1.4.2 - Generated in 0.05s